// const path = window.require('node:path')
// const { ipcRenderer } = window.require('electron');

// //ffi调用
// const ffi = window.require('ffi-napi');
// const ref = window.require('ref-napi');
// const PARAMETER_TYPE = {
//     SET_DISTANCE: 1,
//     GET_DISTANCE: 2,
//     SET_AMBIENT_TEMP: 3,
//     GET_AMBIENT_TEMP: 4,
//     GET_FPA_TEMP: 5,
//     RESET_NOW: 6,
//     HEART_BEATING_ENABLE: 7,
//     HEART_BEATING_DISABLE: 8,
//     SET_DEBUGGING: 9,
//     DEBUGGING_PATH: 10,
//     GRAB_FRAME: 11,
//     SNAPSHOT: 12
//   };
  
//   const IMG_PARAM_TYPE = {
//     SET_FORMAT: 1,
//     SHUTTER_NOW: 2,
//     SET_AUTO_SHUTTER: 3,
//     SET_SHUTTER_TIME: 4,
//     SET_PALETTE: 5,
//     GET_PALETTE: 6,
//     GET_SCALE: 7,
//     SET_CONTRAST: 8,
//     GET_CONTRAST: 9,
//     SET_BRIGHTNESS: 10,
//     GET_BRIGHTNESS: 11,
//     SET_ROTATION: 12,
//     GET_ROTATION: 13,
//     SET_FLIP: 14,
//     GET_FLIP: 15,
//     SET_FRAME_RATE: 16,
//     GET_FRAME_RATE: 17
//   };


//   const StructType = require('ref-struct-di')(ref);

// // 定义CallBackData结构体类型
// const CallBackData = StructType({
//     width: ref.types.int,
//     height: ref.types.int,
//     yuvData: ref.refType(ref.types.void),
//     yuvLength: ref.types.int,
//     y16Data: ref.refType(ref.types.void),
//     y16Length: ref.types.int
// });

// // 创建CallBackData实例
// const callBackData = new CallBackData({
//     width: 0,
//     height: 0,
//     yuvData: ref.NULL,
//     yuvLength: 0,
//     y16Data: ref.NULL,
//     y16Length: 0
// });

// // // 定义ImageCallBack回调函数类型
// const ImageCallBack = ffi.Callback(ref.types.int, [CallBackData, 'void*']);

//   const myDll = ffi.Library(path.join(__dirname, '/lib/ArmSdk'), {
//     'CreateModuleInstance': ['pointer', ['string']],
//     'MeasureParamsControl': ['int', ['pointer', 'int', 'pointer']],
//     'RegisterImgCallBack': ['int', ['pointer', 'pointer', 'pointer', 'float']],
//     'ImageParamsControl': ['int', ['pointer', 'int', 'pointer']],
//     'DestroyModuleInstance': ['void', ['pointer']]
//   });
  
//   const g_Module = myDll.CreateModuleInstance('');
//   // 创建一个空的 Buffer 对象
// const emptyBuffer = Buffer.alloc(0);
// //myDll.MeasureParamsControl(g_Module, PARAMETER_TYPE.DEBUGGING_PATH, ffi.NULL);

// const isDebugging = ref.alloc('bool', 0);
// myDll.MeasureParamsControl(g_Module, PARAMETER_TYPE.SET_DEBUGGING, isDebugging);

// let GUIDEIR_OK = 0 

// async function init(){
//     if (g_Module) {

//         const fDistance = ref.alloc('float', 0.8);
//         if (myDll.MeasureParamsControl(g_Module, PARAMETER_TYPE.SET_DISTANCE, fDistance) !== GUIDEIR_OK) {
//         console.log('set distance error!');
//         }

//         const fEnvironment = ref.alloc('float', 25.0);
//         if (myDll.MeasureParamsControl(g_Module, PARAMETER_TYPE.SET_AMBIENT_TEMP, fEnvironment) !== GUIDEIR_OK) {
//         console.log('set environment error!');
//         }

//         //默认输出
//         //256
//         // 192
//         // 147456
//         const paramBufferInt = ref.alloc('int', 1);
//         let result =  myDll.ImageParamsControl(g_Module, 1, paramBufferInt);

//     }

//     while (true) {
//         // 用户其他操作
//         await new Promise(resolve => setTimeout(resolve, 1000));
//     }

//     if (g_Module) {
//         myDll.DestroyModuleInstance(g_Module);
//         g_Module = 0;
//     }
// }


// document.addEventListener('DOMContentLoaded', () => {
//     init().catch(console.error);
//     const ImageCallBack = ffi.Callback('int', [CallBackData, 'int'], function(callBackData, param) {
//         // // 获取 RGB888 数据的指针
//         const rgbPointer = callBackData.yuvData;
      
//         // 假设 rgbLength 是 RGB888 数据的长度
//         const rgbLength = callBackData.yuvLength;
      
//         // 将 void 指针转换为 Uint8Array
//         const videoData = new Uint8Array(ref.reinterpret(rgbPointer, rgbLength));
//         console.log(videoData)
//          // 假设 rgbData 是包含 RGB888 数据的 Uint8Array，宽度为 256，高度为 192
//          const width = 256;
//          const height = 192;
//          const totalLength = 256 * 192 * 3;
      
//          // 获取输出 canvas 元素
//          const outputCanvas = document.getElementById('outputCanvas');
//          const outputCtx = outputCanvas.getContext('2d');
      
      
//          // 假设 rawData 是你的 RGB888 数据源，dataLength 是数据长度，width 和 height 分别是图像的宽度和高度
//          let imageDataArray = new Uint8ClampedArray(width * height * 4); // 每个像素点包含 RGBA 四个分量
      
//          // 将 RGB888 数据转换为适合在 canvas 上显示的格式
//          for (let i = 0, j = 0; i < totalLength; i += 3, j += 4) {
//              imageDataArray[j] = videoData[i]; // 设置红色分量
//              imageDataArray[j + 1] = videoData[i + 1]; // 设置绿色分量
//              imageDataArray[j + 2] = videoData[i + 2]; // 设置蓝色分量
//              imageDataArray[j + 3] = 255; // 设置 alpha 通道为不透明
//          }
      
//          // 创建 ImageData 对象
//          const imageData = new ImageData(imageDataArray, width, height);
         
//          // 在 canvas 上绘制图像
//          outputCtx.putImageData(imageData, 0, 0);
      
      
//         return 0;
//       });
    
//       myDll.RegisterImgCallBack(g_Module, ImageCallBack, null, 1);

// });



// 在渲染进程中接收视频流数据并更新 <video> 标签
const { ipcRenderer } = window.require('electron');


ipcRenderer.on('video-stream', (event, videoData) => {

    // 假设 rgbData 是包含 RGB888 数据的 Uint8Array，宽度为 256，高度为 192
    const width = 256;
    const height = 192;
    const totalLength = 256 * 192 * 3;



    // 获取输出 canvas 元素
    const outputCanvas = document.getElementById('outputCanvas');
    const outputCtx = outputCanvas.getContext('2d');


    // 假设 rawData 是你的 RGB888 数据源，dataLength 是数据长度，width 和 height 分别是图像的宽度和高度
    let imageDataArray = new Uint8ClampedArray(width * height * 4); // 每个像素点包含 RGBA 四个分量

    // 将 RGB888 数据转换为适合在 canvas 上显示的格式
    for (let i = 0, j = 0; i < totalLength; i += 3, j += 4) {
        imageDataArray[j] = videoData[i]; // 设置红色分量
        imageDataArray[j + 1] = videoData[i + 1]; // 设置绿色分量
        imageDataArray[j + 2] = videoData[i + 2]; // 设置蓝色分量
        imageDataArray[j + 3] = 255; // 设置 alpha 通道为不透明
    }

    // 创建 ImageData 对象
    const imageData = new ImageData(imageDataArray, width, height);
    
    // 在 canvas 上绘制图像
    outputCtx.putImageData(imageData, 0, 0);
     
});